what is dsa in programming and how does it work